/* 
定义带getter和setter的属性
功能类似于defineProperty
*/

class RefImpl {
  constructor (value) {
    this._value = value
  }

  get value () { // 监视读
    console.log('读取value')
    return this._value
  }

  set value (val) { // 监视修改
    console.log('设置value', val)
    this._value = val
  } 
}


/* 测试 */

const countRef = new RefImpl(2)
console.log(countRef)
// 读取value  => getter方法  => 读取_value的值返回
console.log(countRef.value)
// 设置value => setter方法  => 将传入的新值保存到_value属性上
countRef.value = 3


// countRef就是我们vue3中通过ref(value)返回的对象
// ref函数内部会new RefImpl(value), 并返回它